package leetcode每日一题;

import java.util.HashMap;
import java.util.HashSet;

/**
 * 1. 问题描述
 *
 * 2. 算法分析
 *
 * 3. 代码实现
 */
@SuppressWarnings("all")
public class 无重复最大子字符串 {
    public static void main(String[] args) {
        HashMap map = new HashMap();

    }

    /**
     * 暴力法 时间复杂度O(n^3) 空间复杂度O(n)  效率非常低，大量冗余的判断
     * @param s
     * @return
     */
    public static int lengthOfLongestSubstring1(String s) {
        int len = s.length(); // 获取字符串的长度
        if(len <= 1) {return len;} // 特殊边界
        // 暴力求解
        int max = 0; // 记录最长无重复连续字符串的长度
        char[] tempArray = s.toCharArray(); // 将字符串转化为字符数组
        HashSet<Character> set = new HashSet<>(); // 用于判断当前元素是否出现过
        for(int i = 0; i < len; i++) {
            // 找到以当前字符为起点的最长无重复的连续子串的长度
            set.add(tempArray[i]); // 让当前起始字符进入到集合中
            for(int j = i + 1; j < len; j++) {
                if(!set.contains(tempArray[j])) {
                    set.add(tempArray[j]);
                } else {
                    break; // 如果当前重复了退出循环
                }
            }
            max = Math.max(max,set.size());
            set.clear(); // 重置
        }
        return max;
    }


    /**
     *  滑动窗口
     * @param s
     * @return
     */
    public static int lengthOfLongestSubstring2(String s) {
        int left = 0; // 窗口的左边界
        int right = 0; // 窗口的右边界


        return -1;
    }

}
